package socket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP握手协议
 * 在TCP/IP协议中，TCP协议采用三次握手建立一个连接。
 * 第一次握手:建立连接时，客户端发送SYN包(SYN=J)到服务器，并进入SYN_SEND状态，等待服务器确认；
 * 第二次握手:服务器收到SYN包，必须确认客户的SYN（ACK=J+1），同时自己也发送一个SYN包（SYN=K），即SYN+ACK包，此时服务器V状态；
 * 第三次握手:客户端收到服务器的SYN＋ACK包，向服务器发送确认包ACK(ACK=K+1)，此包发送完毕，客户端和服务器进入ESTABLISHED状态，完成三次握手。
 * 完成三次握手，客户端与服务器开始传送数据
 * **/
class TcpServer{

    public static void main(String[] args) throws Exception{
        System.out.println("tcp服务端启动....");
        //创建服务端，指定端口号
        ServerSocket serverSocket = new ServerSocket(8080);
        //等待客户端发起请求，否则阻塞，不会执行之后代码
        Socket socket = serverSocket.accept();
        //获取数据
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        String content = new String(bytes,0,len,"GBK");
        System.out.println(content);
        //关闭服务端
        serverSocket.close();
    }
}

public class TcpClient {
    public static void main(String[] args) throws Exception{
        System.out.println("tcp客户端启动");
        //创建客户端，指定ip端口号
        Socket socket = new Socket("127.0.0.1",8080);
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("你好，我是李博飞tcp的客户端".getBytes("GBK"));
        socket.close();
    }
}
